﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Threading;
using System.Windows.Controls.Primitives;
using System.Windows.Threading;

namespace ManagementSystem
{
    /// <summary>
    /// Registreerimise aken. Saab luua uue kasutaja.
    /// </summary>
    public partial class Registreerimine : Window
    {
        StatusBar status;

        /// <summary>
        /// Konstruktor
        /// </summary>
        /// <param name="status">Peaakna staatusbar</param>
        public Registreerimine(StatusBar status)
        {
            InitializeComponent();
            this.status = status;
        }

        /// <summary>
        /// Kui kasutaja vajutab nupule välju, käivitatakse see meetod, kus väljutakse antud aknast.
        /// </summary>
        /// <param name="sender">Sedner objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void v2ljuNupp_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        /// <summary>
        /// Kui vajutatakse nupule "registreeri", käivitatakse antud meetod.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void registreeriNupp_Click(object sender, RoutedEventArgs e)
        {
            clearLastBorderBrush();

            DatabaseUser user = new DatabaseUser();
            if (eesnimiBox.Text.Equals(""))
            {
                eesnimiBox.BorderBrush = new SolidColorBrush(Colors.Red);
                return;
            }
            else
            {
                user.FirstName = eesnimiBox.Text;
            }

            if (perenimiBox.Text.Equals(""))
            {
                perenimiBox.BorderBrush = new SolidColorBrush(Colors.Red);
                return;
            }
            else
            {
                user.LastName = perenimiBox.Text;
            }

            if (kasutajanimiBox.Text.Equals(""))
            {
                kasutajanimiBox.BorderBrush = new SolidColorBrush(Colors.Red);
                return;
            }
            else
            {
                user.UserName = kasutajanimiBox.Text;
            }
            if (passwordBox1.Password.Equals("") || passwordBox1.Password != passwordBox2.Password)
            {
                passwordBox1.BorderBrush = new SolidColorBrush(Colors.Red);
                passwordBox2.BorderBrush = new SolidColorBrush(Colors.Red);
                return;
            }
            else
            {
                user.Password = passwordBox1.Password;
            }

            Thread workerThread = new Thread(() => this.saveUser(user));
            workerThread.Start();
            this.Close();
            
            
        }


        /// <summary>
        /// Meetod salvestab kasutaja andmebaasi.
        /// </summary>
        /// <param name="user">Kasutaja, keda salvestada</param>
        private void saveUser(DatabaseUser user)
        {
            try
            {
                DataClasses1DataContext kont = new DataClasses1DataContext();

                var kontroll = from kt in kont.Users where kt.userName == user.UserName select kt.userName;
                foreach (var k in kontroll)
                {
                    if ((string)k == user.UserName)
                    {
                        throw new Exception("sama nimega kasutaja on juba baasis olemas.");
                    }
                }
                

                User kasutaja = new User();
                kasutaja.firstName = user.FirstName;
                kasutaja.lastName = user.LastName;
                kasutaja.userName = user.UserName;
                kasutaja.password = user.Password;
                kont.Users.InsertOnSubmit(kasutaja);
                kont.SubmitChanges();
                kont.Dispose();

                Action action = new Action(() => { status.Items.Clear(); status.Items.Add("Kasutaja "+user.UserName+ " edukalt loodud !"); });
                this.Dispatcher.Invoke(action, DispatcherPriority.ApplicationIdle);
            }
            catch (Exception e)
            {
                MessageBox.Show("Tekkis viga: " + e.Message);
            }
        }

        /// <summary>
        /// Tagasiside ebasobivatele lahtritele.
        /// </summary>
        private void clearLastBorderBrush()
        {
            eesnimiBox.BorderBrush = new SolidColorBrush(Colors.Black);
            perenimiBox.BorderBrush = new SolidColorBrush(Colors.Black);
            kasutajanimiBox.BorderBrush = new SolidColorBrush(Colors.Black);
            passwordBox1.BorderBrush = new SolidColorBrush(Colors.Black);
            passwordBox2.BorderBrush = new SolidColorBrush(Colors.Black);
        }

        /// <summary>
        /// Kui muutus eesnime kasti sisu.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void eesnimiBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            eesnimiBox.BorderBrush = new SolidColorBrush(Colors.Black);

        }

        /// <summary>
        /// Kui muutus perenime kasti sisu.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void perenimiBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            perenimiBox.BorderBrush = new SolidColorBrush(Colors.Black);
        }

        /// <summary>
        /// Kui muutus kasutajanime kasti sisu.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void kasutajanimiBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            kasutajanimiBox.BorderBrush = new SolidColorBrush(Colors.Black);
        }

        /// <summary>
        /// Kui muutus esimese paroolikasti nimi.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void passwordBox1_PasswordChanged(object sender, RoutedEventArgs e)
        {
            passwordBox1.BorderBrush = new SolidColorBrush(Colors.Black);
        }

        /// <summary>
        /// Kui muutus teise paroolikasti nimi.
        /// </summary>
        /// <param name="sender">Sender objekt</param>
        /// <param name="e">Sündmuse parameetrid</param>
        private void passwordBox2_PasswordChanged(object sender, RoutedEventArgs e)
        {
            passwordBox2.BorderBrush = new SolidColorBrush(Colors.Black);
        }
    }
}
